Software persistency relates to storing data about a state of a system, or a component within a system, in a non-volatile memory. For example, in a system that records streamed data into files, persistency data may include a dynamic list of open or active files, their location on the disk and their respective stream identification. In case of a system crash, e.g., if the system stops to operate for some reason, the last state of the system will be saved. The saved persistency data may be used for recovery later on. After the system recovers and resumes operation, the persistency data may be read from the non-volatile memory, and the system may resume operation smoothly. For example, data of the same stream may be written to open files or open files may be closed.
A system that records audio into files on a storage device would save in a persistency database, the state of the calls and the location of the respective files on the storage. When a call ends, the system would finalize the file and clear the relevant data from the persistency database. In case of a system crash, a recovery mechanism may fetch from the persistency database the list of active calls and their locations on the storage. Based on this information, the recovery mechanism may finalize the files and clear the persistency database.
Smooth recovery after a crash may be an essential requirement for many systems. However, keeping an up-to-date and accurate persistency databases increases software complexity and is costly in terms of computing power.